SQLiteはファイル1つで完結する軽量データベース、 Entity Framework Core(EF Core)は.NET標準のORM。 この2つを組み合わせると、コードファーストでスキーマ管理しやすい軽量アプリを構築できます。
この記事でわかること
・SQLite × EF Core の基本構成
・モデルとDbContextの定義方法
・マイグレーションの流れ(コードファースト)
・CRUDの実装例
・SQLite特有の制限と注意点
・SQLite × EF Core の基本構成
・モデルとDbContextの定義方法
・マイグレーションの流れ(コードファースト)
・CRUDの実装例
・SQLite特有の制限と注意点
1. 必要なNuGetパッケージ
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Sqlite
- Microsoft.EntityFrameworkCore.Tools(マイグレーション用)
コンソールアプリやWebアプリで共通して使えます。
2. モデルクラスを定義する
public class User
{
public int Id { get; set; } // 主キー
public string Name { get; set; } // 必須
public int? Age { get; set; } // null許可
}
3. DbContextを定義する
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=app.db");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.Property(x => x.Name)
.IsRequired()
.HasMaxLength(100);
}
}
4. マイグレーションを作成・適用する
コマンドライン(.NET CLI)から実行します。
dotnet ef migrations add InitialCreate
dotnet ef database update
migrations add:モデルから差分を生成database update:SQLiteファイルに反映
5. INSERT(追加)
using var db = new AppDbContext();
var user = new User
{
Name = "Taro",
Age = 25
};
db.Users.Add(user);
db.SaveChanges();
6. SELECT(取得)
using var db = new AppDbContext();
var allUsers = db.Users.ToList();
var over20 = db.Users
.Where(x => x.Age >= 20)
.OrderBy(x => x.Id)
.ToList();
7. UPDATE(更新)
using var db = new AppDbContext();
var user = db.Users.FirstOrDefault(x => x.Id == 1);
if (user != null)
{
user.Age = 30;
db.SaveChanges();
}
8. DELETE(削除)
using var db = new AppDbContext();
var user = db.Users.FirstOrDefault(x => x.Id == 1);
if (user != null)
{
db.Users.Remove(user);
db.SaveChanges();
}
9. SQLite × EF Core の注意点
SQLiteは機能がフルではない
・一部の型・機能(複雑なトランザクション、並列書き込みなど)に制限あり
・高負荷・大規模用途には不向き
・一部の型・機能(複雑なトランザクション、並列書き込みなど)に制限あり
・高負荷・大規模用途には不向き
- 複雑なクエリはSQLを確認(
ToQueryString()など) - 同時書き込みが多いシステムには向かない
- マイグレーションでスキーマ変更を管理するのが基本
10. ベストプラクティス
- 小〜中規模アプリでコードファースト管理したいときに最適
- モデル・DbContext・マイグレーションをセットで運用
- 大量データ・高負荷ならSQL Server等も検討
- DBファイルは書き込み可能なフォルダに配置
- バックアップはファイルコピーでOK(SQLiteの強み)
まとめ:SQLite × EF Core は“軽量 × スキーマ管理しやすい”構成
- コードファーストでスキーマを管理できる
- SQLiteの軽さとEF Coreの生産性を両立
- 小〜中規模の業務アプリ・ツールに最適
「インストール不要の軽量DB」+「コードで管理できるORM」 という組み合わせは、個人開発・社内ツール・小規模業務アプリにとても相性が良いです。 この記事をベースに、あなたのプロジェクトに取り入れてみてください。